草庐IT

带指针的 C++ vector

全部标签

c++ - push_back() 是否总是增加 vector 的大小?

我有一段代码创建了一个已知大小的std::vector:std::vectorvectorOfTs(n);是否调用push_back将大小增加到n+1?vectorOfTs.push_back(T()); 最佳答案 是的;注意vector.capacity()不同于vector.size().后者表示当前vector中的元素数,而前者表示适合当前分配给vector内部缓冲区的空间的项目数。 关于c++-push_back()是否总是增加vector的大小?,我们在StackOverflo

C++老师告诉我不要用指针

昨天我的老师告诉我不要使用指针,除非我想编写一些非常低级的东西。他说垃圾收集器会为我做所有事情,所以指针基本上是低效和危险的。我很生气,因为我以前听过不同之处。那么什么是对的,什么是错的呢?我应该使用指针吗?如果没有,为什么在没有人使用的情况下还要实现它们? 最佳答案 在C++中使用垃圾收集器需要严格的纪律,而且还需要相当称职的程序员,即使在C++11中增加了对垃圾收集的支持也是如此。所以你的老师可能是别的意思。可能他/她的意思是您应该优先使用标准库容器(如vector和string)和智能指针来处理您必须处理的所有权处理指针。这是

c++ - 如何优化指针间接层

我正在尝试在繁重的计算应用程序中优化这类事情:说我有一个doubled[500][500][500][500];至少从编译器的角度来看,以下是相当昂贵的doubled[x][y][j][k]我想告诉编译器它是连续的内存,以方便计算偏移量。在我的例子中,我有这样的东西:doublen=0;for(inti=0;i所以我试图通过将它放在一个单独的函数中来优化它voidfunc(double***constrestrictdMatrix){/*anddosomecalculationsherel*/}没有太大帮助:(有什么优化建议吗?编辑我无法重写代码使数组成为一维。我必须和这个多维的野兽一

c++ - 使用 C++11 Lambda 函数更改 vector(list, deque...) 中的所有元素

我有以下代码:#include#include#includeintmain(intargc,char*argv[]){std::vectorobj;obj.push_back(10);obj.push_back(20);obj.push_back(30);std::for_each(obj.begin(),obj.end(),[](intx){returnx+2;});for(int&v:obj)std::cout结果是:10、20、30我想使用新C++11标准的Lambda函数更改vector(obj)中的所有元素。这是for_each函数的实现代码:templateFunctio

c++ - 我可以通过 for_each <algorithm> 在 C++ 中的指针 vector 上调用 `delete` 吗?

假设我有一个std::vectorobjs(出于性能原因,我的指针不是实际的Objs)。我用obj.push_back(newObj(...));填充它反复。完成后,我必须delete被推回的元素。一种方法是这样做:for(std::vector::iteratorit=objs.begin();it!=objs.end();++it){delete*it;}但是,如果我可以使用for_each我很感兴趣算法做同样的事情:#include...for_each(objs.begin(),objs.end(),delete);你怎么看? 最佳答案

c++ - 在 C++ 中,如何获取指向 vector 的指针?

我正在编写一些C++代码来操纵一堆大小不断变化的vector,因此不断地重新分配。我想得到一个指向这些vector的“指针”,即使在重新分配vector后它仍然有效。更具体地说,我只想让这些“指针”记住它们指向哪个vector以及它们指向的索引。当我使用标准(*ptr)语法取消引用它们时,我只想让它们进行明显的查找。显然,实际指针在重新分配后将无效,我的理解是迭代器在重新分配后也无效。还要注意,我不关心元素是否插入到我的对象之前,所以这些“指针”实际上不需要记住任何东西,只需要记住一个vector和一个索引。现在,我可以轻松地自己编写这样的类。有没有人(Boost?STL?)已经为我完

c++ - 如何使用成员作为 C++ 中的键对 vector 元素进行排序

假设我们有一个vectorallstudent现在我想使用不同的成员对学生进行排序,例如姓名、年龄、地址等。我该怎么做? 最佳答案 创建一个仿函数来比较正确的字段,然后在排序时指定仿函数:structby_age{booloperator()(studentconst&a,studentconst&b)const{returna.age从C++11开始,您可以使用lambda表达式“就地”进行比较,如下所示://sortbyname:std::sort(students.begin(),students.end(),[](stude

c++ - std::vector 优化

假设从std::vector读取大量值的循环是我程序中的瓶颈,建议我更改voidf(std::vectorv){...while(...){...intx=v[i]+v[j]...}}到voidf(std::vectorv){int*p_v=&v[0];...while(...){...intx=p_v[i]+p_v[j]...}}通过绕过[]运算符,这实际上会提高性能吗? 最佳答案 更有可能(从表面上看)每次调用此函数时复制整个vector是瓶颈。为什么不是下面的呢?voidf(conststd::vector&v)在任何情况下,

c++ - 将智能指针所有权转移到容器

我的数据结构通常通过std::unique_ptr管理,例如AST中的表达式。structBinExpr{std::unique_ptrleft;//Leftownstheexpressionstd::unique_ptrright;//Rightownstheexpression};在大多数情况下效果很好。但有时我没有固定数量的表达式可以拥有,例如在列表中structListExpr{std::vector>exprs;//Exprsownspointerswhicheachownanexpression};但我不喜欢通过vector中的智能指针这种额外的间接寻址,我认为它没有表达我

c++ - 将 python numpy 数组转换为 C++ STL vector

我正在寻找一种在C++中读取包含numpy数组的文本文件并将数据放入vector>的方法,谁能帮帮我?非常感谢。阿奇编辑:文本文件的格式[[[01][23][45][67][89]][[1011][1213][1415][1617][1819]][[2021][2223][2425][2627][2829]][[3031][3233][3435][3637][3839]]]也许更易读:[[[01][23][45][67][89]][[1011][1213][1415][1617][1819]][[2021][2223][2425][2627][2829]][[3031][3233][3